import { defHttp } from "/@/utils/http/axios"

enum Api {
  cpuCount = "/actuator/metrics/system.cpu.count",
  cpuUsage = "/actuator/metrics/system.cpu.usage",
  processStartTime = "/actuator/metrics/process.start.time",
  processUptime = "/actuator/metrics/process.uptime",
  processCpuUsage = "/actuator/metrics/process.cpu.usage",

  jvmMemoryMax = "/actuator/metrics/jvm.memory.max",
  jvmMemoryCommitted = "/actuator/metrics/jvm.memory.committed",
  jvmMemoryUsed = "/actuator/metrics/jvm.memory.used",
  jvmBufferMemoryUsed = "/actuator/metrics/jvm.buffer.memory.used",
  jvmBufferCount = "/actuator/metrics/jvm.buffer.count",
  jvmThreadsDaemon = "/actuator/metrics/jvm.threads.daemon",
  jvmThreadsLive = "/actuator/metrics/jvm.threads.live",
  jvmThreadsPeak = "/actuator/metrics/jvm.threads.peak",
  jvmClassesLoaded = "/actuator/metrics/jvm.classes.loaded",
  jvmClassesUnloaded = "/actuator/metrics/jvm.classes.unloaded",
  jvmGcMemoryAllocated = "/actuator/metrics/jvm.gc.memory.allocated",
  jvmGcMemoryPromoted = "/actuator/metrics/jvm.gc.memory.promoted",
  jvmGcMaxDataSize = "/actuator/metrics/jvm.gc.max.data.size",
  jvmGcLiveDataSize = "/actuator/metrics/jvm.gc.live.data.size",
  jvmGcPause = "/actuator/metrics/jvm.gc.pause",

  tomcatSessionsCreated = "/actuator/metrics/tomcat.sessions.created",
  tomcatSessionsExpired = "/actuator/metrics/tomcat.sessions.expired",
  tomcatSessionsActiveCurrent = "/actuator/metrics/tomcat.sessions.active.current",
  tomcatSessionsActiveMax = "/actuator/metrics/tomcat.sessions.active.max",
  tomcatSessionsRejected = "/actuator/metrics/tomcat.sessions.rejected",
}

/**
 * 查询cpu数量
 */
export const getCpuCount = () => {
  return defHttp.get({ url: Api.cpuCount }, { isTransformResponse: false })
}

/**
 * 查询系统 CPU 使用率
 */
export const getCpuUsage = () => {
  return defHttp.get({ url: Api.cpuUsage }, { isTransformResponse: false })
}

/**
 * 查询应用启动时间点
 */
export const getProcessStartTime = () => {
  return defHttp.get({ url: Api.processStartTime }, { isTransformResponse: false })
}

/**
 * 查询应用已运行时间
 */
export const getProcessUptime = () => {
  return defHttp.get({ url: Api.processUptime }, { isTransformResponse: false })
}

/**
 * 查询当前应用 CPU 使用率
 */
export const getProcessCpuUsage = () => {
  return defHttp.get({ url: Api.processCpuUsage }, { isTransformResponse: false })
}

/**
 * 查询JVM 最大内存
 */
export const getJvmMemoryMax = () => {
  return defHttp.get({ url: Api.jvmMemoryMax }, { isTransformResponse: false })
}

/**
 * JVM 可用内存
 */
export const getJvmMemoryCommitted = () => {
  return defHttp.get({ url: Api.jvmMemoryCommitted }, { isTransformResponse: false })
}

/**
 * JVM 已用内存
 */
export const getJvmMemoryUsed = () => {
  return defHttp.get({ url: Api.jvmMemoryUsed }, { isTransformResponse: false })
}

/**
 * JVM 缓冲区已用内存
 */
export const getJvmBufferMemoryUsed = () => {
  return defHttp.get({ url: Api.jvmBufferMemoryUsed }, { isTransformResponse: false })
}

/**
 *JVM 当前缓冲区数量
 */
export const getJvmBufferCount = () => {
  return defHttp.get({ url: Api.jvmBufferCount }, { isTransformResponse: false })
}

/**
 **JVM 守护线程数量
 */
export const getJvmThreadsDaemon = () => {
  return defHttp.get({ url: Api.jvmThreadsDaemon }, { isTransformResponse: false })
}

/**
 *JVM 当前活跃线程数量
 */
export const getJvmThreadsLive = () => {
  return defHttp.get({ url: Api.jvmThreadsLive }, { isTransformResponse: false })
}

/**
 *JVM 峰值线程数量
 */
export const getJvmThreadsPeak = () => {
  return defHttp.get({ url: Api.jvmThreadsPeak }, { isTransformResponse: false })
}

/**
 *JVM 已加载 Class 数量
 */
export const getJvmClassesLoaded = () => {
  return defHttp.get({ url: Api.jvmClassesLoaded }, { isTransformResponse: false })
}

/**
 *JVM 未加载 Class 数量
 */
export const getJvmClassesUnloaded = () => {
  return defHttp.get({ url: Api.jvmClassesUnloaded }, { isTransformResponse: false })
}

/**
 **GC 时, 年轻代分配的内存空间
 */
export const getJvmGcMemoryAllocated = () => {
  return defHttp.get({ url: Api.jvmGcMemoryAllocated }, { isTransformResponse: false })
}

/**
 *GC 时, 老年代分配的内存空间
 */
export const getJvmGcMemoryPromoted = () => {
  return defHttp.get({ url: Api.jvmGcMemoryPromoted }, { isTransformResponse: false })
}

/**
 *GC 时, 老年代的最大内存空间
 */
export const getJvmGcMaxDataSize = () => {
  return defHttp.get({ url: Api.jvmGcMaxDataSize }, { isTransformResponse: false })
}

/**
 *FullGC 时, 老年代的内存空间
 */
export const getJvmGcLiveDataSize = () => {
  return defHttp.get({ url: Api.jvmGcLiveDataSize }, { isTransformResponse: false })
}

/**
 *系统启动以来GC 次数
 */
export const getJvmGcPause = () => {
  return defHttp.get({ url: Api.jvmGcPause }, { isTransformResponse: false })
}

/**
 *tomcat 已创建 session 数
 */
export const getTomcatSessionsCreated = () => {
  return defHttp.get({ url: Api.tomcatSessionsCreated }, { isTransformResponse: false })
}

/**
 *tomcat 已过期 session 数
 */
export const getTomcatSessionsExpired = () => {
  return defHttp.get({ url: Api.tomcatSessionsExpired }, { isTransformResponse: false })
}

/**
 *tomcat 当前活跃 session 数
 */
export const getTomcatSessionsActiveCurrent = () => {
  return defHttp.get({ url: Api.tomcatSessionsActiveCurrent }, { isTransformResponse: false })
}

/**
 *tomcat 活跃 session 数峰值
 */
export const getTomcatSessionsActiveMax = () => {
  return defHttp.get({ url: Api.tomcatSessionsActiveMax }, { isTransformResponse: false })
}

/**
 *超过session 最大配置后，拒绝的 session 个数
 */
export const getTomcatSessionsRejected = () => {
  return defHttp.get({ url: Api.tomcatSessionsRejected }, { isTransformResponse: false })
}

export const getMoreInfo = (infoType) => {
  if (infoType == "1") {
    return {}
  }
  if (infoType == "2") {
    return { "jvm.gc.pause": [".count", ".totalTime"] }
  }
  if (infoType == "3") {
    return {
      "tomcat.global.request": [".count", ".totalTime"],
      "tomcat.servlet.request": [".count", ".totalTime"],
    }
  }
}

export const getTextInfo = (infoType) => {
  if (infoType == "1") {
    return {
      "system.cpu.count": { color: "green", text: "CPU 数量", unit: "核" },
      "system.cpu.usage": { color: "green", text: "系统 CPU 使用率", unit: "%", valueType: "Number" },
      "process.start.time": { color: "purple", text: "应用启动时间点", unit: "", valueType: "Date" },
      "process.uptime": { color: "purple", text: "应用已运行时间", unit: "秒" },
      "process.cpu.usage": { color: "purple", text: "当前应用 CPU 使用率", unit: "%", valueType: "Number" },
    }
  }
  if (infoType == "2") {
    return {
      "jvm.memory.max": { color: "purple", text: "JVM 最大内存", unit: "MB", valueType: "RAM" },
      "jvm.memory.committed": { color: "purple", text: "JVM 可用内存", unit: "MB", valueType: "RAM" },
      "jvm.memory.used": { color: "purple", text: "JVM 已用内存", unit: "MB", valueType: "RAM" },
      "jvm.buffer.memory.used": { color: "cyan", text: "JVM 缓冲区已用内存", unit: "MB", valueType: "RAM" },
      "jvm.buffer.count": { color: "cyan", text: "当前缓冲区数量", unit: "个" },
      "jvm.threads.daemon": { color: "green", text: "JVM 守护线程数量", unit: "个" },
      "jvm.threads.live": { color: "green", text: "JVM 当前活跃线程数量", unit: "个" },
      "jvm.threads.peak": { color: "green", text: "JVM 峰值线程数量", unit: "个" },
      "jvm.classes.loaded": { color: "orange", text: "JVM 已加载 Class 数量", unit: "个" },
      "jvm.classes.unloaded": { color: "orange", text: "JVM 未加载 Class 数量", unit: "个" },
      "jvm.gc.memory.allocated": { color: "pink", text: "GC 时, 年轻代分配的内存空间", unit: "MB", valueType: "RAM" },
      "jvm.gc.memory.promoted": { color: "pink", text: "GC 时, 老年代分配的内存空间", unit: "MB", valueType: "RAM" },
      "jvm.gc.max.data.size": { color: "pink", text: "GC 时, 老年代的最大内存空间", unit: "MB", valueType: "RAM" },
      "jvm.gc.live.data.size": { color: "pink", text: "FullGC 时, 老年代的内存空间", unit: "MB", valueType: "RAM" },
      "jvm.gc.pause.count": { color: "blue", text: "系统启动以来GC 次数", unit: "次" },
      "jvm.gc.pause.totalTime": { color: "blue", text: "系统启动以来GC 总耗时", unit: "秒" },
    }
  }
  if (infoType == "3") {
    return {
      "tomcat.sessions.created": { color: "green", text: "tomcat 已创建 session 数", unit: "个" },
      "tomcat.sessions.expired": { color: "green", text: "tomcat 已过期 session 数", unit: "个" },
      "tomcat.sessions.active.current": { color: "green", text: "tomcat 当前活跃 session 数", unit: "个" },
      "tomcat.sessions.active.max": { color: "green", text: "tomcat 活跃 session 数峰值", unit: "个" },
      "tomcat.sessions.rejected": { color: "green", text: "超过session 最大配置后，拒绝的 session 个数", unit: "个" },
      "tomcat.global.sent": { color: "purple", text: "发送的字节数", unit: "bytes" },
      "tomcat.global.request.max": { color: "purple", text: "request 请求最长耗时", unit: "秒" },
      "tomcat.global.request.count": { color: "purple", text: "全局 request 请求次数", unit: "次" },
      "tomcat.global.request.totalTime": { color: "purple", text: "全局 request 请求总耗时", unit: "秒" },
      "tomcat.servlet.request.max": { color: "cyan", text: "servlet 请求最长耗时", unit: "秒" },
      "tomcat.servlet.request.count": { color: "cyan", text: "servlet 总请求次数", unit: "次" },
      "tomcat.servlet.request.totalTime": { color: "cyan", text: "servlet 请求总耗时", unit: "秒" },
      "tomcat.threads.current": { color: "pink", text: "tomcat 当前线程数（包括守护线程）", unit: "个" },
      "tomcat.threads.config.max": { color: "pink", text: "tomcat 配置的线程最大数", unit: "个" },
    }
  }
}

/**
 * 查询cpu数量
 * @param params
 */
export const getServerInfo = (infoType) => {
  if (infoType == "1") {
    return Promise.all([getCpuCount(), getCpuUsage(), getProcessStartTime(), getProcessUptime(), getProcessCpuUsage()])
  }
  if (infoType == "2") {
    return Promise.all([
      getJvmMemoryMax(),
      getJvmMemoryCommitted(),
      getJvmMemoryUsed(),
      getJvmBufferCount(),
      getJvmBufferMemoryUsed(),
      getJvmThreadsDaemon(),
      getJvmThreadsLive(),
      getJvmThreadsPeak(),
      getJvmClassesLoaded(),
      getJvmClassesUnloaded(),
      getJvmGcLiveDataSize(),
      getJvmGcMaxDataSize(),
      getJvmGcMemoryAllocated(),
      getJvmGcMemoryPromoted(),
      getJvmGcPause(),
    ])
  }
  if (infoType == "3") {
    return Promise.all([
      getTomcatSessionsActiveCurrent(),
      getTomcatSessionsActiveMax(),
      getTomcatSessionsCreated(),
      getTomcatSessionsExpired(),
      getTomcatSessionsRejected(),
    ])
  }
}
